package Day18_网络编程.demo4_文件上传之服务器回写;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @Author：pengzhilin
 * @Date: 2020/5/10 14:15
 */
public class Server {
    public static void main(String[] args) throws Exception {
        // 1.创建ServerSocket对象,指定端口号
        ServerSocket ss = new ServerSocket(7777);

        // 2.调用accept()方法,等待客户端连接,连接成功返回Socket对象,连接失败就一直阻塞
        Socket socket = ss.accept();

        // 3.通过返回的Socket对象获得字节输入流对象,关联连接通道
        InputStream is = socket.getInputStream();

        // 4.创建字节输出流对象,关联目的地文件路径
        FileOutputStream fos = new FileOutputStream("Demo02\\aa\\aCopy4.jpg");

        // 5.定义一个字节数组,用来存储读取到的文件字节数据
        byte[] bys = new byte[8192];
        // 6.定义一个变量,用来存储读取到的字节个数
        int len;
        // 8.循环读取
        // 问题: 服务器还在等待读取客户端写过来的数据
        while ((len = is.read(bys)) != -1) {
            // 9.在循环中,写出数据
            fos.write(bys,0,len);
        }
        // --------------服务器读完了客户端写过来的数据之后,回写信息给客户端-----------------
        System.out.println("服务器开始回写数据................");
        // 10.通过返回的Socket对象获得字节输出流对象,关联连接通道
        OutputStream os = socket.getOutputStream();

        // 11.使用字节输出流对象,写出字符串数据
        os.write("文件上传成功!".getBytes());// 写字符串数据的字节数组

        // 12.关闭资源
        fos.close();
        socket.close();
        ss.close();
    }
}
